#include<stdio.h>
#include<iostream>
using namespace std;

int result;

//组合数计算
long factorial(long number)
{
    if(number<=1)
        return 1;
    else
        return number*factorial(number-1);
}

int combinator(int n,int m)
{
    return factorial(n)/(factorial(m)*factorial(n-m));
}

int digui(int m,int n) //计算m组分n个有几种分法，这里面每组不能落空
{
    if(m==1)
        return 1;

    int result=0;
    for(int i=1;i<n;i++) //第一组分几个，注意必须留一个不能都减没
        result+=digui(m-1,n-i);
    return result;
}

int main()
{
    int m=4,n=4; //m类，n个球
    result=0;
    for(int i=1;i<=n;i++) //在几组里分配
    {
        if(i==1)
        {
            result+=combinator(m,1); //一种颜色就是m种选法
            continue;
        }
        result+=combinator(m,i)*digui(i,n);
    }
    cout<<result;
}
